package com.krediti.session;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.faces.event.ValueChangeEvent;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.security.Restrict;
import org.jboss.seam.framework.EntityHome;

import com.krediti.entity.KreditniZahtev;
import com.krediti.entity.Status;
import com.krediti.entity.StatusZahteva;

@Name("statusZahtevaHome")
public class StatusZahtevaHome extends EntityHome<StatusZahteva> {

	/**
	 * Generated serial version.
	 * 
	 */
	private static final long serialVersionUID = -4545021976007614870L;

	@In(create = true)
	@Out
	KreditniZahtevHome kreditniZahtevHome;

	@In(create = true)
	@Out
	StatusHome statusHome;

	String descriptor = "";

	public Integer getStatusZahtevaId() {
		return (Integer) getId();
	}

	public void setStatusZahtevaId(Integer id) {
		setId(id);
	}

	@Override
	public StatusZahteva createInstance() {
		StatusZahteva statusZahteva = new StatusZahteva();
		return statusZahteva;

	}

	public KreditniZahtev getKreditniZahtev() {
		return getInstance() == null ? null : getInstance().getKreditniZahtev();

	}

	public Status getStatus() {
		return getInstance() == null ? null : getInstance().getStatus();

	}

	public StatusZahteva getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public void wire() {
		getInstance();
		KreditniZahtev kreditniZahtev = kreditniZahtevHome.getDefinedInstance();
		if (kreditniZahtev != null) {
			getInstance().setKreditniZahtev(kreditniZahtev);
		}

		Status status = statusHome.getDefinedInstance();
		if (status != null) {
			getInstance().setStatus(status);

		}

		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
		getInstance().setDatum(sdf.format(new Date()));

	}

	public boolean isWired() {
		return true;
	}

	/**
	 * 
	 * @param e
	 *            ValueChangeEvent
	 */
	public void setKreditniZahtevDescription(ValueChangeEvent e) {
		KreditniZahtev kreditniZahtev = (KreditniZahtev) e.getNewValue();
		descriptor = "Broj zahteva: "
				+ kreditniZahtev.getBrojZahteva().toString()
				+ ", Datum podnosenja:"
				+ kreditniZahtev.getDatumZahteva().toString() + ", Iznos: "
				+ kreditniZahtev.getIznos().toString();

	}

	/**
	 * Returns description of loan request.
	 * 
	 * @return
	 */
	public String getDescriptor() {
		return descriptor;

	}

	@Override
	@Restrict("#{s:hasRole('admin')}")
	public String persist() {
		super.persist();

		azurirajStatusKreditnogZahteva();

		return "persisted";
	}

	/**
	 * Updates loan request relation at the latest status.
	 * 
	 */
	private void azurirajStatusKreditnogZahteva() {
		Status status = getInstance().getStatus();
		KreditniZahtev kreditniZahtev = getInstance().getKreditniZahtev();

		kreditniZahtev.setStatus(status);

		getEntityManager().persist(kreditniZahtev);

	}

}
